package com.bjx.generator.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bjx.common.mybatis.plus.util.ConvertUtil;
import com.bjx.generator.domain.entity.TemplateEntity;
import com.bjx.generator.domain.query.TemplateQuery;
import com.bjx.generator.domain.vo.TemplateVO;
import com.bjx.generator.mapper.TemplateMapper;
import com.bjx.generator.service.ITemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @desc: 代码模板业务实现
 * @author: liushuai
 * @date: 2022/9/8 15:12
 */
@Service
public class TemplateServiceImpl extends ServiceImpl<TemplateMapper, TemplateEntity> implements ITemplateService {
    @Autowired
    private TemplateMapper templateMapper;
    @Override
    public void insertTemplate(TemplateVO templateVO) {
        TemplateEntity entity = Convert.convert(TemplateEntity.class, templateVO);
        this.save(entity);
    }

    @Override
    public IPage<TemplateVO> listTemplatePage(TemplateQuery templateQuery) {
        LambdaQueryWrapper<TemplateEntity> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StrUtil.isNotEmpty(templateQuery.getTemplateName()),TemplateEntity::getTemplateName,templateQuery.getTemplateName());
        IPage page = templateMapper.selectPage(templateQuery.getPage(), wrapper);
        IPage<TemplateVO> iPage = ConvertUtil.toPage(TemplateVO.class, page);
        return iPage;
    }

    @Override
    public void updateTemplateByTemplateId(TemplateVO templateVO) {
        TemplateEntity entity = Convert.convert(TemplateEntity.class, templateVO);
        this.updateById(entity);
    }

    @Override
    public void deleteTemplateByTemplateId(Long templateId) {
        templateMapper.deleteById(templateId);
    }

    @Override
    public TemplateVO selectTemplateByTemplateId(Long templateId) {
        TemplateEntity entity = templateMapper.selectById(templateId);
        TemplateVO vo = Convert.convert(TemplateVO.class, entity);
        return vo;
    }

    @Override
    public List<TemplateEntity> listTemplatesByTemplateIds(List<Long> templateIds) {
        if(CollectionUtil.isEmpty(templateIds)){
           return new ArrayList<TemplateEntity>();
        }
        LambdaQueryWrapper<TemplateEntity> wrapper = new LambdaQueryWrapper();
        wrapper.in(TemplateEntity::getTemplateId,templateIds);
        return templateMapper.selectList(wrapper);
    }

    @Override
    public List<TemplateVO> listTemplate(TemplateQuery templateQuery) {
        LambdaQueryWrapper<TemplateEntity> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(StrUtil.isNotEmpty(templateQuery.getTemplateName()),TemplateEntity::getTemplateName,templateQuery.getTemplateName());
        List<TemplateEntity> list = templateMapper.selectList( wrapper);
        List<TemplateVO> templateVOS = Convert.toList(TemplateVO.class, list);
        return templateVOS;
    }
}
